From: Joan Torres Lopez Date: Tue, 5 May 2026 15:26:27 +0000 (+0200) Subject: animationUtils: Skip no-op wiggle to avoid cancelling pending transitions X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~10^2^2~7 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=352a572b22e8bde1fc45eb999b067a29c6939bad;p=gnome-shell.git animationUtils: Skip no-op wiggle to avoid cancelling pending transitions When wiggle() is called with duration 0, the async easeAsync calls yield between microtasks, leaving pending operations that remove transitions on the same property. This becomes a problem when two setMessage() calls happen in the same call stack (e.g. via _queuePriorityMessage): the first fires a no-op wiggle(dur:0) and the second starts the real wiggle(dur:65). When microtasks drain, the first wiggle's pending easeAsync calls overwrite the second wiggle's active transition, effectively cancelling the real animation. Return early when duration is 0, since the animation is a no-op anyway. Fixes: fdadbb7a5a2 ("animationUtils: Use easeAsync() for wiggle") Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/work_items/9207 Part-of: --- diff --git a/js/misc/animationUtils.js b/js/misc/animationUtils.js index 44d6e2fff..2112b59f3 100644 --- a/js/misc/animationUtils.js +++ b/js/misc/animationUtils.js @@ -85,7 +85,7 @@ export function ensureActorVisibleInScrollView(scrollView, actor) { * @param {number} params.wiggleCount - the number of times to wiggle the actor */ export async function wiggle(actor, params) { - if (!St.Settings.get().enable_animations) + if (!St.Settings.get().enable_animations || params?.duration === 0) return; params = Params.parse(params, {